package com.liang.bishi.jd;

import java.util.*;

/**
 * 9.14京东笔试第二题
 * 题目：给定n个字符串，并且给定一个长为26的字符串rank，代表每个字母处的位置，请你根据这个rank对这n个字符串进行排序。
 * 输入：
 *  abcdefghijklmnopqrstuvwxyz
 *  3
 *  aaa
 *  aac
 *  aaaa
 * 输出：
 *  aaa
 *  aaaa
 *  aac
 * 说明：自定义排序实现，按照原字母表排序，字母表变了，对应的顺序也就变了
 */
public class Problem2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String orders = in.nextLine();
        int n = Integer.parseInt(in.nextLine());
        List<String> orderString = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            orderString.add(in.nextLine());
        }
        sort(orders, orderString);
    }

    // 根据orders字符串中字符的指定顺序来对orderString列表中的字符串进行排序
    public static void sort(String orders, List<String> orderString) {
        Map<Character, Integer> orderMap = new HashMap<>();
        int rank = 1;
        for (Character order : orders.toCharArray()) {
            orderMap.put(order, rank++);
        }
        // 排序
        orderString.sort((s1, s2) -> {
            int minLength = Math.min(s1.length(), s2.length());
            for (int i = 0; i < minLength; i++) {
                if (!(s1.charAt(i) == s2.charAt(i))) {
                    // > 0 s2 s1 降序
                    // = 0 不变
                    // < 0 s1 s2 升序
                    return orderMap.get(s1.charAt(i)) - orderMap.get(s2.charAt(i));
                }
            }
            return s1.length() - s2.length();
        });
        // 打印排好序的字符串
        for (String s : orderString) {
            System.out.println(s);
        }
    }
}
